package client

import (
	"fmt"
	"github.com/spf13/cobra"
	"os"
)

// exitCmd 停止服务命令
var ExitCmd = &cobra.Command{
	Use:     "exit",
	Short:   "停止fastdp-ops的web服务",
	Example: `  停止服务: fastdp-ops exit`,
	Args:    cobra.NoArgs,
	Run: func(cmd *cobra.Command, args []string) {
		pid, err := readPidFile(pidFile)
		if err != nil {
			fmt.Printf("停止服务失败: %v\n", err)
			os.Exit(1)
		}

		process, err := os.FindProcess(pid)
		if err != nil {
			fmt.Printf("找不到进程: %v\n", err)
			os.Exit(1)
		}

		if err := process.Kill(); err != nil {
			fmt.Printf("终止进程失败: %v\n", err)
			os.Exit(1)
		}

		if err := os.Remove(pidFile); err != nil && !os.IsNotExist(err) {
			fmt.Printf("删除PID文件失败: %v\n", err)
			os.Exit(1)
		}

		fmt.Println("服务已停止")
	},
}

// 读取PID文件
func readPidFile(path string) (int, error) {
	data, err := os.ReadFile(path)
	if err != nil {
		return 0, fmt.Errorf("无法读取PID文件: %w", err)
	}

	var pid int
	_, err = fmt.Sscanf(string(data), "%d", &pid)
	if err != nil {
		return 0, fmt.Errorf("无效的PID格式: %w", err)
	}

	return pid, nil
}
